
package view;

import control.Comando;
import control.Controle;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import javax.swing.*;
import model.*;


public class InterfaceGerenciarPlaylist implements Comando {

    @Override
    public void executar() {
        
        if (Controle.usuarioAtual.getPlaylists().size() == 1) {JOptionPane.showMessageDialog(null, "Não há Playlists editáveis.");}
        else {
                
            HashMap playlists = new HashMap();      

            int valor = 0;
            ArrayList<String> opcoes = new ArrayList();
            
            Iterator<Playlist> it = Controle.usuarioAtual.getPlaylists().iterator();        

            while(it.hasNext())
            {
                Playlist obj = it.next();
                if (!obj.getNome().equals("Principal")){
                    String chave = Integer.toString(valor) + " | " + obj.getNome();
                    opcoes.add(chave);
                    playlists.put(chave, obj);

                    valor++;   
                }
            }
            opcoes.add("Voltar");
            playlists.put("Voltar", null);
            

            String retorno =  Controle.getInput("Escolha sua Playlist:", "Gerenciar Playlist",opcoes.toArray());
            if (playlists.get(retorno)!=null){
                
                Playlist playlistSelecionada = (Playlist)playlists.get(retorno); 

                Object[] opcoes2 = {"Excluir Playlist", "Editar Nome", "Adicionar Música", "Excluir Música"};
                HashMap controleOp2 = new HashMap();
                controleOp2.put("Excluir Playlist", 1);
                controleOp2.put("Editar Nome", 2);
                controleOp2.put("Adicionar Música", 3);
                controleOp2.put("Excluir Música", 4);

                String opcaoSelecionada = Controle.getInput("Escolha uma Opção: ", "SongLoad", opcoes2);

                switch ((Integer)controleOp2.get(opcaoSelecionada)){
                    case 1: {
                        playlistSelecionada.getAutor().getPlaylists().remove(playlistSelecionada);                 
                    }break;


                    case 2: {
                        //System.out.println("Editar Nome");

                        String novoNome = Controle.getInput("Nome Atual: \""+playlistSelecionada.getNome() +"\"\nDigite o novo nome da Playlist", "Gerenciar Playlist");
                        if (Controle.usuarioAtual.getPlaylists().contains(new Playlist(novoNome, Controle.usuarioAtual))){
                            JOptionPane.showMessageDialog(null, "Nome já utilizado");
                        }else {
                            playlistSelecionada.setNome(novoNome);        
                        }
                    }break;


                    case 3: {
                        //System.out.println("Adicionar musica");

                        playlists = new HashMap(); 
                        valor = 0;
                        opcoes = new ArrayList();

                        ArrayList<Musica> musicasAux = (ArrayList)Controle.usuarioAtual.getPlaylists("Principal").getMusicas().clone(); //
                        musicasAux.removeAll((Collection)playlistSelecionada.getMusicas());
                        if (musicasAux.size() == 0){JOptionPane.showMessageDialog(null, "Esta Playlist já contém todas as suas musicas.");}
                        else{
                            Iterator<Musica> it2 = musicasAux.iterator();   

                            while(it2.hasNext())
                            {
                                Musica obj = it2.next();

                                String chave = Integer.toString(valor) + " | " + obj.getTitulo() + " - " + obj.getArtista().getNomeArtistico();
                                opcoes.add(chave);
                                playlists.put(chave, obj);

                                valor++; 
                            }

                            retorno =  Controle.getInput("Escolha uma música:", "Gerenciar Playlist", opcoes.toArray());
                            Musica musicaSelecionada = (Musica)playlists.get(retorno); 

                            playlistSelecionada.addMusica(musicaSelecionada);
                        }

                    }break;                    

                    case 4: {
                        //System.out.println("excluir musica");

                        playlists = new HashMap(); 
                        valor = 0;
                        opcoes = new ArrayList();

                        ArrayList<Musica> musicasAux = playlistSelecionada.getMusicas();
                        if (musicasAux.isEmpty()){JOptionPane.showMessageDialog(null, "Esta Playlist não contém músicas.");}
                        else{
                            Iterator<Musica> it2 = musicasAux.iterator();   

                            while(it2.hasNext())
                            {
                                Musica obj = it2.next();

                                String chave = Integer.toString(valor) + " | " + obj.getTitulo() + " - " + obj.getArtista().getNomeArtistico();
                                opcoes.add(chave);
                                playlists.put(chave, obj);

                                valor++; 
                            }

                            retorno =  Controle.getInput("Escolha uma música:", "Gerenciar Playlist",opcoes.toArray());
                            Musica musicaSelecionada = (Musica)playlists.get(retorno); 

                            playlistSelecionada.removeMusica(musicaSelecionada);
                        }                    
                    }break;                
                }
            }
        }
    
    }
}
